home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / APPEXPRT.PAK / TLISTBOX.OWL < prev    next >
Text File  |  1997-05-06  |  6KB  |  194 lines

  1. <<[H]TListBox [[TListBox]]
  2. ##{hheader.snp}
  3. #include <owl/listbox.h>
  4.  
  5. ##<<TApplication QUERY_FILENAME_CPP [[Filename]]
  6. #include "[[Filename]].rh"            // Definition of all resources.
  7.  
  8.  
  9. //{{TListBox = [[TListBox]]}}
  10. class [[TListBox]] : public TListBox {
  11.   public:
  12.     [[TListBox]](TWindow* parent, int id, int x, int y, int w, int h, TModule* module = 0);
  13.     virtual ~[[TListBox]]();
  14. ##--BEGIN-- @OPT_APPL_PRINTING
  15.  
  16. //{{[[TListBox]]VIRTUAL_BEGIN}}
  17.   public:
  18.     virtual void Paint(TDC& dc, bool erase, TRect& rect);
  19. ##:DBVirtual(\\"[[TListBox]]", "Paint")
  20. //{{[[TListBox]]VIRTUAL_END}}
  21. //{{[[TListBox]]RSP_TBL_BEGIN}}
  22.   protected:
  23.     void EvGetMinMaxInfo(MINMAXINFO far& minmaxinfo);
  24. //{{[[TListBox]]RSP_TBL_END}}
  25. DECLARE_RESPONSE_TABLE([[TListBox]]);
  26. ##--END-- @OPT_APPL_PRINTING
  27. };    //{{[[TListBox]]}}
  28. ##{hfooter.snp}
  29. >>[H]TListBox [[TListBox]]
  30.  
  31.  
  32. <<[CPP]TListBox [[TListBox]]
  33. ##{cheader.snp}
  34. #include <owl/pch.h>
  35.  
  36. ##<<TApplication QUERY_FILE_H [[FileName]]
  37. #include "[[FileName]]"
  38. ##--BEGIN-- !@OPT_APPL_DOCVIEW
  39. ##  --BEGIN-- @QUERY_APPL_MODEL == VALUE_MDI
  40. ##:     <<TMDIChild QUERY_WIND_CLIENT [[Client]]
  41. ##:     <<*Client QUERY_FILE_H [[FileName]]
  42. #include "[[FileName]]"
  43. ##  --END-- @QUERY_APPL_MODEL == VALUE_MDI
  44. ##  --BEGIN-- @QUERY_APPL_MODEL == VALUE_SDI
  45.  
  46. ##  --END-- @QUERY_APPL_MODEL == VALUE_SDI
  47. ##--END-- !@OPT_APPL_DOCVIEW
  48. ##QUERY_FILE_H [[FileName]]
  49. #include "[[FileName]]"
  50.  
  51. #include <stdio.h>
  52.  
  53.  
  54. //{{[[TListBox]] Implementation}}
  55.  
  56.  
  57. ##--BEGIN-- @OPT_APPL_PRINTING
  58. ##@QUERY_APPL_COMMENT == VALUE_VERBOSE 4
  59. //
  60. // Build a response table for all messages/commands handled
  61. // by [[TListBox]] derived from TListBox.
  62. //
  63. DEFINE_RESPONSE_TABLE1([[TListBox]], TListBox)
  64. //{{[[TListBox]]RSP_TBL_BEGIN}}
  65. ##:DBResponse(\\"[[TListBox]]", "", "", "WM_GETMINMAXINFO", "")
  66.   EV_WM_GETMINMAXINFO,
  67. //{{[[TListBox]]RSP_TBL_END}}
  68. END_RESPONSE_TABLE;
  69.  
  70.  
  71. ##--END-- @OPT_APPL_PRINTING
  72. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  73. //--------------------------------------------------------
  74. // [[TListBox]]
  75. // ~~~~~~~~~~
  76. // Construction/Destruction handling.
  77. //
  78. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  79. [[TListBox]]::[[TListBox]](TWindow* parent, int id, int x, int y, int w, int h, TModule* module)
  80. :
  81.   TListBox(parent, id, x, y, w, h, module)
  82. {
  83.   Attr.Style &= ~LBS_SORT;                    // Don't sort the list its a file.
  84.   Attr.Style |= LBS_NOINTEGRALHEIGHT;         // Don't let it adjust within the frame
  85.  
  86. ##QUERY_WIND_STYLE [[StyleAttributes]]
  87. ##StyleAttributes != "" 3
  88.   // Override the default window style for TListBox.
  89.   [[StyleAttributes]]
  90.  
  91. ##{wndbkgd.snp}
  92.   // INSERT>> Your constructor code here.
  93.  
  94. }
  95.  
  96.  
  97. [[TListBox]]::~[[TListBox]]()
  98. {
  99.   Destroy();
  100.  
  101.   // INSERT>> Your destructor code here.
  102.  
  103. }
  104. ##--BEGIN-- @OPT_APPL_PRINTING == TRUE
  105.  
  106.  
  107. ##@QUERY_APPL_COMMENT == VALUE_VERBOSE 3
  108. //
  109. // Paint routine for Window, Printer, and PrintPreview for a TListBox client.
  110. //
  111. void [[TListBox]]::Paint(TDC& dc, bool, TRect& rect)
  112. {
  113. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  114.   [[TApplication]]* theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  115.   if (theApp) {
  116. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  117.     // Only paint if we're printing and we have something to paint, otherwise do nothing.
  118.     //
  119.     if (theApp->Printing && theApp->Printer && !rect.IsEmpty()) {
  120. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 3
  121.       // Use pageSize to get the size of the window to render into.  For a Window it's the client area,
  122.       // for a printer it's the printer DC dimensions and for print preview it's the layout window.
  123.       //
  124.       TSize  pageSize(rect.right - rect.left, rect.bottom - rect.top);
  125.  
  126.       HFONT  hFont = (HFONT)GetWindowFont();
  127.       TFont  font("Arial", -12);
  128.       if (!hFont)
  129.         dc.SelectObject(font);
  130.       else
  131.         dc.SelectObject(TFont(hFont));
  132.  
  133.       TEXTMETRIC  tm;
  134.       int fHeight = dc.GetTextMetrics(tm) ? tm.tmHeight + tm.tmExternalLeading : 10;
  135.  
  136. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  137.       // How many lines of this font can we fit on a page.
  138.       //
  139.       int linesPerPage = MulDiv(pageSize.cy, 1, fHeight);
  140.       if (linesPerPage) {
  141.         TPrintDialog::TData& printerData = theApp->Printer->GetSetup();
  142.  
  143.         int maxPg = (GetCount() / linesPerPage) + 1.0;
  144.  
  145. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  146.         // Compute the number of pages to print.
  147.         //
  148.         printerData.MinPage = 1;
  149.         printerData.MaxPage = maxPg;
  150.  
  151. ##@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  152.         // Do the text stuff:
  153.         //
  154.         int     fromPage = printerData.FromPage == -1 ? 1 : printerData.FromPage;
  155.         int     toPage = printerData.ToPage == -1 ? 1 : printerData.ToPage;
  156.         int     currentPage = fromPage;
  157.         TAPointer<char> buffer = new char[255];
  158.  
  159.         while (currentPage <= toPage) {
  160.           int startLine = (currentPage - 1) * linesPerPage;
  161.           int lineIdx = 0;
  162.           while (lineIdx < linesPerPage) {
  163. ##@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  164.             // If the string is no longer valid then there's nothing more to display.
  165.             //
  166.             if (GetString(buffer, startLine + lineIdx) < 0)
  167.               break;
  168.             dc.TabbedTextOut(TPoint(0, lineIdx * fHeight), buffer, strlen(buffer), 0, 0, 0);
  169.             lineIdx++;
  170.           }
  171.           currentPage++;
  172.         }
  173.       }
  174.     }
  175.   }
  176. }
  177.  
  178.  
  179. void [[TListBox]]::EvGetMinMaxInfo(MINMAXINFO far& minmaxinfo)
  180. {
  181. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  182.   [[TApplication]]* theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  183.   if (theApp) {
  184.     if (theApp->Printing) {
  185.       minmaxinfo.ptMaxSize = TPoint(32000, 32000);
  186.       minmaxinfo.ptMaxTrackSize = TPoint(32000, 32000);
  187.       return;
  188.     }
  189.   }
  190.   TListBox::EvGetMinMaxInfo(minmaxinfo);
  191. }
  192. ##--END-- @OPT_APPL_PRINTING == TRUE
  193. >>[CPP]TListBox [[TListBox]]
  194.